package org.lora.util;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>
 * Title:StringUtil
 * </p>
 * <p>
 * Desription:字符串工具类
 * </p>
 * Create Time:2016年7月6日 下午12:40:45
 * 
 * @author Bladnir@outlook.com
 *         <p>
 *         History:
 *         </p>
 *         2016年7月6日 Bladnir Create</br>
 */
public class StringUtil {

	public static final String BLANK = "";

	public static final String SPACE = " ";

	public static final String SLASH = "/";

	public static final String POINT = ".";

	public static final String NULL_STR = "null";

	/**
	 * 构造方法
	 */
	private StringUtil() {
		// just do nothing
	}

	/**
	 * 是否为空
	 * 
	 * @param obj
	 * @return
	 */
	public static boolean isNotNull(Object obj) {
		return !isNull(obj);
	}

	/**
	 * 是否为空
	 * 
	 * @param obj
	 * @return
	 */
	public static boolean isNull(Object obj) {
		return obj == null || obj.toString().trim().length() <= 0 || obj.toString().trim().equalsIgnoreCase(NULL_STR);
	}

	/**
	 * 去掉null和空格
	 * 
	 * @param obj
	 * @return
	 */
	public static String getDisplayValue(Object obj) {
		if (obj == null || obj.toString().trim().length() <= 0 || obj.toString().trim().equalsIgnoreCase(NULL_STR)) {
			return "";
		} else {
			return obj.toString();
		}
	}

	/**
	 * 如果是null和空则显示默认值
	 * 
	 * @param obj
	 * @param defaultValue
	 * @return
	 */
	public static String getDisplayDefaultValue(Object obj, String defaultValue) {
		if (obj == null || obj.toString().trim().length() <= 0 || obj.toString().trim().equalsIgnoreCase(NULL_STR)) {
			return defaultValue;
		} else {
			return obj.toString();
		}
	}

	/**
	 * 首字母小写
	 * 
	 * @param name
	 * @return
	 */
	public static String downFrist(String name) {
		return (new StringBuilder(String.valueOf(name.substring(0, 1).toLowerCase()))).append(name.substring(1)).toString();
	}

	/**
	 * 截取指定长度字符串，超出部分用...代替
	 * 
	 * @param str
	 * @param length
	 * @return
	 */
	public static String getAppointLengthStr(String str, int length) {
		if (str.length() > length) {
			return str.substring(0, length) + "...";
		} else {
			return str;
		}
	}

	/**
	 * 获取指定数量的空格
	 * 
	 * @param num
	 * @return
	 */
	public static String getSpace(int num) {
		StringBuilder sbSpace = new StringBuilder("");
		String space = " ";
		if (num > 0) {
			for (int i = 0; i < num; i++) {
				sbSpace.append(space);
			}
		}

		return sbSpace.toString();
	}

	/**
	 * 根据正则表达式验证字符串
	 * 
	 * @param str
	 * @param rule
	 * @return
	 */
	public static boolean validateString(String str, String rule) {

		if (isNotNull(str) && isNotNull(rule)) {
			// 将正则表达式编译为Pattern
			Pattern p = Pattern.compile(rule);
			// 创建匹配器
			Matcher m = p.matcher(str);

			return m.matches();
		} else {
			return false;
		}

	}

	/**
	 * 从Map中获取字符串
	 * 
	 * @param key
	 * @param map
	 * @return
	 */
	public static String getStringFromMap(String key, Map<String, Object> map) {

		if (StringUtil.isNull(key) || map == null || map.isEmpty()) {
			return null;
		}

		if (map.containsKey(key)) {
			Object value = map.get(key);
			if (StringUtil.isNotNull(value)) {
				return value.toString();
			} else {
				return null;
			}
		} else {
			return null;
		}

	}

}
